/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function (head) {
  /**
  思路：循环
  循环head，条件时head不能为null
  声明一个新的head
  第一次：将循环第一个元素加到newhead上，并将它的next指向null，head向前走一步
  第二次：拿到第二个元素，他的next指向newhead，并赋值给newhead
  以此类推，直到head为null
   */

  if (head == null || head.next == null) return head
  let newHead = null
  while (head !== null) {
    let temp = head.next
    head.next = newHead
    newHead = head
    head = temp

  }
  return newHead


  /** 递归，两两互换，先从底层节点开始，也就是从后往前，开始两两比较
  考虑终止条件 也就是head的next为null
   */

  // function reverse(head){
  //     if( head ==null || head.next ==null) return head // 没有下一个节点说明到头了
  //    let newHead =  reverse(head.next)
  //     head.next.next = head // 两两交换
  //     head.next = null
  //     return newHead

  // }
  //  return reverse (head)


};